import axios from "axios"
import qs from "querystring"

const errorHandle = (status, info) => {
	switch (status) {
		case 400:
			console.log("服务器收到客户端通过PUT或者POST请求提交的表示，表示的格式正确，但服务器不懂它什么意思");
			break;
		case 401:
			console.log("客户端试图对一个受保护的资源进行操作，却又没有提供正确的认证证书");
			break;
		case 403:
			console.log("客户端请求的结构正确，但是服务器不想处理它");
			break;
		case 404:
			console.log("资源被围定义(网络请求地址错误)");
			console.log(info);
			break;
		case 500:
			console.log("执行请求处理代码时遇到了异常，它们就发送此响应代码");
			break;
		case 503:
			console.log("最可能的原因是资源不足：服务器突然收到太多请求，以至于无法全部处理");
			break;
		default:
			console.log(info);
			break;
	}
}



// 创建axios的实例对象
const instance = axios.create({
	timeout: 5000
})

// 处理并发请求方法
instance.all = axios.all;
instance.spread = axios.spread

// 全局配置
// instance.defaults.baseURL = "http://iwenwiki.com";
instance.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded';

//请求拦截和响应拦截
instance.interceptors.request.use(
	config => {
		if (config.method === 'post') {
			config.data = qs.stringify(config.data);
		}
		return config
	},
	// 为什么这里要用Promise返回
	error => Promise.reject(error)
)

instance.interceptors.response.use(
	response => response.status === 200 ? Promise.resolve(response) : Promise.reject(response),
	error => {
		const {
			response
		} = error;
		if (response) {
			/**
			 * 错误信息以状态码为主
			 */
			errorHandle(response.status, response.data);
			return Promise.reject(response);
		} else {
			console.log("请求被中断");
		}
	}
)

/**
 * 提供get和post的请求方式
 */

export function get(url, params) {
	return new Promise((resolve, reject) => {
		instance.get(url, {
			params
		}).then(res => {
			resolve(res.data);
		}).catch(err => {
			reject(err.data);
		})
	})
}

export function post(url, params) {
	return new Promise((resolve, reject) => {
		instance.post(url, params).then(res => {
			resolve(res.data)
		}).catch(err => {
			reject(err.data)
		})
	})
}

export default instance
